package br.com.gbvbahia.mybooks.modelos;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.apache.commons.lang3.StringUtils;

import br.com.gbvbahia.commons.modelos.EntityInterface;
import br.com.gbvbahia.mybooks.R;
import br.com.gbvbahia.mybooks.dao.contract.DB;

public class PerfilVO implements EntityInterface {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private String id;
	private String perfil;
	private String email;
	private String senha;
	private int salvoWS = FALSE;
	private long dataAlteracao = new Date().getTime();

	@Override
	public List<Integer> seValidar() {
		List<Integer> toReturn = new ArrayList<Integer>();
		if (StringUtils.length(perfil) > 30) {
			toReturn.add(R.string.aviso_64);
		}
		if (StringUtils.length(email) > 100) {
			toReturn.add(R.string.aviso_65);
		}
		if (!StringUtils.isBlank(email)) {
			if (!email.matches("[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`"
							+ "{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:"
							+ "[a-z0-9-]*[a-z0-9])?")) {
				toReturn.add(R.string.aviso_37);
			}
		}
		if(StringUtils.length(senha) > 20){
			toReturn.add(R.string.aviso_66);
		}
		return toReturn;
	}

	@Override
	public void prepareUpdate() {
		dataAlteracao = new Date().getTime();
	}

	@Override
	public void prepareInsert() {
		prepareUpdate();
	}

	public PerfilVO() {
		super();
	}

	public PerfilVO(String perfil, String email) {
		super();
		this.perfil = perfil;
		this.email = email;
	}

	public PerfilVO(String perfil, String email, String senha) {
		super();
		this.perfil = perfil;
		this.email = email;
		this.senha = senha;
	}

	public PerfilVO(String id, String perfil, String email, String senha,
			long dataAlteracao) {
		super();
		this.id = id;
		this.perfil = perfil;
		this.email = email;
		this.senha = senha;
		this.dataAlteracao = dataAlteracao;
	}

	@Override
	public boolean gerarId() {
		return true;
	}

	@Override
	public void setId(Serializable id) {
		setId(id.toString());
	}

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getPerfil() {
		return perfil;
	}

	public void setPerfil(String perfil) {
		this.perfil = perfil;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public String getSenha() {
		return senha;
	}

	public void setSenha(String senha) {
		this.senha = senha;
	}

	public long getDataAlteracao() {
		return dataAlteracao;
	}

	public void setDataAlteracao(long dataAlteracao) {
		this.dataAlteracao = dataAlteracao;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result
				+ (int) (dataAlteracao ^ (dataAlteracao >>> 32));
		result = prime * result + ((email == null) ? 0 : email.hashCode());
		result = prime * result + ((id == null) ? 0 : id.hashCode());
		result = prime * result + ((perfil == null) ? 0 : perfil.hashCode());
		result = prime * result + ((senha == null) ? 0 : senha.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		PerfilVO other = (PerfilVO) obj;
		if (dataAlteracao != other.dataAlteracao)
			return false;
		if (email == null) {
			if (other.email != null)
				return false;
		} else if (!email.equals(other.email))
			return false;
		if (id == null) {
			if (other.id != null)
				return false;
		} else if (!id.equals(other.id))
			return false;
		if (perfil == null) {
			if (other.perfil != null)
				return false;
		} else if (!perfil.equals(other.perfil))
			return false;
		if (senha == null) {
			if (other.senha != null)
				return false;
		} else if (!senha.equals(other.senha))
			return false;
		return true;
	}

	public int getSalvoWS() {
		return salvoWS;
	}

	public void setSalvoWS(int salvoWS) {
		this.salvoWS = salvoWS;
	}

}
